#include "mainwindowaccount.h"
#include "ui_mainwindowaccount.h"

//extern QTcpSocket *tcpSocket;

MainWindowAccount::MainWindowAccount(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindowAccount)
{
    ui->setupUi(this);

    //设置窗口名和窗口大小
    setWindowTitle("海底捞点单系统 V1.7.9");
    setFixedSize(800, 480);

    //当有数据接受的时候，tcpSocket 会自动触发 readyRead 信号,在对应的槽函数中获取数据
    connect(tcpSocket, &QTcpSocket::readyRead, this, &MainWindowAccount::onRecvDataSlot);
}

MainWindowAccount::~MainWindowAccount()
{
    delete ui;
}

//注册按钮槽函数
void MainWindowAccount::on_btn_register_clicked()
{
    //获取输入框中的账号和密码
    QString account = ui->lineEdit_account->text();
    QString password = ui->lineEdit_password->text();

    //判断是否为空
    if(account.isEmpty() && !password.isEmpty())
    {
        QMessageBox::warning(this, "提示", "请输入账号！");
        return;
    }
    else if(!account.isEmpty() && password.isEmpty())
    {
        QMessageBox::warning(this, "提示", "请输入密码！");
        return;
    }
    else if(account.isEmpty() && password.isEmpty())
    {
        QMessageBox::warning(this, "提示", "请输入账号和密码！");
        return;
    }

    //不为空则将账号和密码拼接在一起，并在末尾加一个"account_ok"的标识符，表示这是注册信息，冒号区分不同类型的信息
    QString flag = "account_ok";
    QString usrInfo = QString("%1:%2:%3").arg(account).arg(password).arg(flag);

    //将打包好的信息发送给服务器
    tcpSocket->write(usrInfo.toUtf8().data());

    //并将输入框清空
    ui->lineEdit_account->clear();
    ui->lineEdit_password->clear();
}

//登录按钮槽函数
void MainWindowAccount::on_btn_login_clicked()
{
    //获取输入框中的账号和密码
    QString account = ui->lineEdit_account->text();
    QString password = ui->lineEdit_password->text();

    //判断输入框是否为空
    if(account.isEmpty() && !password.isEmpty())
    {
        //提示对话框
        QMessageBox::warning(this, "提示", "请输入账号！");
        return;
    }
    else if(!account.isEmpty() && password.isEmpty())
    {
        QMessageBox::warning(this, "提示", "请输入密码！");
        return;
    }
    else if(account.isEmpty() && password.isEmpty())
    {
        QMessageBox::warning(this, "提示", "请输入账号和密码！");
        return;
    }

    //不为空则将账号和密码拼接在一起，并在末尾加一个"login_ok"的标识符，表示这是登录信息，冒号区分不同类型的信息
    QString flag = "login_ok";
    QString usrInfo = QString("%1:%2:%3").arg(account).arg(password).arg(flag);

    //将打包好的信息发送给服务器
    tcpSocket->write(usrInfo.toUtf8().data());

    //并将输入框清空
    ui->lineEdit_account->clear();
    ui->lineEdit_password->clear();
}

//返回上一个界面
void MainWindowAccount::on_btn_back_clicked()
{
    //因为在跳转时，记录了上一个界面
    //所以可以利用此函数获取当前窗口的父窗口对象指针
    QWidget *parent = this->parentWidget();
    parent->show();//把之前父界面的隐藏状态改为显示状态，显示父界面
    this->close();//关闭当前界面
    //销毁子界面
    delete this;
}

//注册和登录接收服务器反馈
void MainWindowAccount::onRecvDataSlot()
{
    //获取服务器反馈
    QString data = tcpSocket->readAll();
    qDebug() << data;

    //01号错误表示账号已经被注册
    if(data.compare("error01") == 0)
    {
        QMessageBox::warning(this, "提示", "当前账号已经被注册！");
        return;
    }
    //02号错误表示密码输入错误
    else if(data.compare("error02") == 0)
    {
        QMessageBox::warning(this, "提示", "密码错误！请重新输入！");
        return;
    }
    //表示注册成功
    else if(data.compare("success01") == 0)
    {
         QMessageBox::information(this, "提示", "注册成功！");
    }
    //表示登录成功，并切换新的界面
    else if(data.compare("success02") == 0)
    {
        //第一步：创建另一个界面的对象  new MainWindow(this) 把父窗口传递过去，记录从哪一个界面跳转
        MainWindowHomePage *mainWidget = new MainWindowHomePage(this);

        //第二步：//关闭之后自动销毁对象
        mainWidget->setAttribute(Qt::WA_DeleteOnClose);

        //第三步：显示要跳转的界面
        mainWidget->show();

        //第四步：隐藏当前的界面,跳转到另一个界面之后，点击返回按钮还可以返回当前界面
        this->hide();
    }
}
